package com.glaive;

import cn.hutool.core.util.StrUtil;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;

public class DuplicateFileHandleCmd0317 {
    static String filePath = System.getProperty("user.dir") + "\\Regex2.html";

    public static void main(String[] args) throws Exception {
        readLine();

    }

    /**
     * 读取HTML文件并删除重复行
     * <p>
     * -匹配HTML标签，因标签嵌套 所以效果不行
     * <(\S*?)[^>]*>.*?</\1>|<.*? />
     * <p>
     * 匹配以引号("")开头结尾，中间包含(ed2k/http/thunder)数据的行：
     * (?<=\")((ed2k://.*)|(http://.*)|(thunder://.*))(?=\")
     * 其他操作： 过滤等
     */
    public static void readLine() throws Exception {
        //正则说明：
        // 1.匹配以引号("")开头结尾，中间包含(ed2k/http/thunder)数据的行：效果OK
        // 2.匹配HTML标签里的内容：无效果
        //HTML标签匹配效果不行，因为嵌套太深。 指定标签名称，效果会好点
        Pattern pattern = Pattern.compile(
                "((?<=\")((ed2k://.*)|(http://.*)|(thunder://.*))(?=\")"
                        + "|"
                        + "(?<=<\\s{1,65535}>)((ed2k://.*)|(http://.*)|(thunder://.*))(?=</\\s{1,65535}>))");

//        Pattern pattern = Pattern.compile(
//                "((ed2k://)|(http://)|(thunder://)).*\\|\\/");

        Files
                .lines(Paths.get(filePath))
                .map(m -> {
                    Matcher matcher = pattern.matcher(m);
                    if (matcher.find())
                        return matcher.group();
                    else
                        return "";
                })
                .filter(s -> !StrUtil.isEmpty(s))
                .distinct()
                .forEach(System.out::println);
    }
}